package algo3.g203.modelo.naves.secciones;

import algo3.g203.modelo.armas.explosiones.Fragmento;
import algo3.g203.modelo.fisica.Direccion;
import algo3.g203.modelo.fisica.Posicion;

public abstract class SeccionTemplate {

	private Posicion posicion;
	private int cantidadDanio;
	
	public SeccionTemplate(Posicion p) {
		this.cantidadDanio = 0;
		this.posicion = p;
	}
	
	public boolean estaDestruida() {
		return (this.cantidadDanio >= this.getResitencia());
	}
	
	/**
	 * @param f : fragmento que realiza danio.
	 * @return true : si el fragmento logro hacerle danio a la seccion.
	 */
	public boolean recibirDanioDe(Fragmento f) {
		if (f.estaEn(this.posicion)) {
			this.cantidadDanio++;
			return true;
		}
		return false;
	}
	
	public boolean estaEn(Posicion p) {
		return this.posicion.equals(p);
	}

	public void desplazarPosicion(Direccion direccionAvance) {
		this.posicion = direccionAvance.siguientePosicion(this.posicion);
	}
	
	/**
	 * TEMPLATE METHOD: Cantidad de impactos que debe recibir para considerarse destruida
	 */
	protected abstract int getResitencia();

	// COSAS PARA TITIRITERO
	
	public int getX() {
		return this.posicion.getCoordenadaX()*50;
	}
	
	public int getY() {
		return this.posicion.getCoordenadaY()*50;
	}


	
}
